﻿using System;
using System.Collections.Generic;

namespace _04_Graph
{
   class Program
   {
      //static void Main(string[] args)
      //{
      //   int[][] matrix = new int[4][]
      //   {
      //      new int[3]{1,1,2},
      //      new int[3]{1,1,3},
      //      new int[3]{1,2,3},
      //      new int[3]{1,3,4},
      //   };
      //   Graph g1 = Graph.Parse(matrix);

      //   int[] nodes = new int[4] { 1, 2, 3, 4 };
      //   int[][] edges = new int[4][]
      //   {
      //      new int[4] {int.MinValue, 1, 1, int.MinValue },
      //      new int[4] {int.MinValue, int.MinValue, 1, int.MinValue },
      //      new int[4] {int.MinValue, int.MinValue, int.MinValue, 1 },
      //      new int[4] {int.MinValue, int.MinValue, int.MinValue, int.MinValue },
      //   };
      //   Graph g2 = Graph.Parse(nodes, edges);

      //   Console.WriteLine("============ BFS ============");
      //   Graph.BFS(g1.nodes[1], elem =>
      //   {
      //      Console.WriteLine(elem);
      //   });

      //   Console.WriteLine("============ DFS_R ============");
      //   Graph.DFS_Recursive(g2.nodes[0], elem =>
      //   {
      //      Console.WriteLine(elem);
      //   });

      //   Console.WriteLine("============ DFS ============");
      //   Graph.DFS(g2.nodes[0], elem =>
      //   {
      //      Console.WriteLine(elem);
      //   });

      //   Console.WriteLine("============ TS ============");
      //   List<Node> tl = Graph.TopologicalSort(g1);
      //   tl.ForEach(node =>
      //   {
      //      Console.WriteLine(node.value);
      //   });
      //}

      //static void Main()
      //{
      //   Heap<int> heap = new Heap<int>(new Heap<int>.SmallHeapComparator());
      //   heap.Push(1);
      //   heap.Push(3);
      //   heap.Push(2);
      //   heap.Push(5);

      //   while (!heap.IsEmpty())
      //   {
      //      Console.WriteLine(heap.Front());
      //      heap.Pop();
      //   }
      //}

      //static void Main()
      //{
      //   Trie trie = new Trie();
      //   trie.Add("asd");
      //   trie.Add("asa");
      //   trie.Add("asc");

      //   trie.Find("as");
      //   trie.PreFixNumber("as");

      //   trie.Delete("asa");
      //   trie.Find("asa");
      //   trie.PreFixNumber("as");
      //}
   }
}
